package cn.nubia.admin.application.service;

import cn.nubia.admin.application.bean.SoftTag;
import cn.nubia.admin.application.bean.SoftTagVo;
import cn.nubia.admin.application.query.SoftTagQueryParam;
import cn.nubia.admin.common.mybatis.bean.Paged;
import cn.nubia.admin.common.mybatis.bean.Query;
import cn.nubia.admin.common.mybatis.service.BaseServiceImpl;
import cn.nubia.admin.common.utils.BeanUtils;
import cn.nubia.admin.common.utils.DateUtil;
import cn.nubia.admin.sysconfig.bean.SystemLog;
import cn.nubia.admin.sysconfig.service.SystemLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2015/7/10.
 */
@Service
public class TagService extends BaseServiceImpl<SoftTag> {

    @Autowired
    SystemLogService systemLogService;



    public Paged<SoftTagVo> findPageList(SoftTagQueryParam tagQuery) {
        Query<SoftTag> query = Query.build(SoftTag.class);
        query.setPaged(tagQuery.getPageNo(), tagQuery.getPageSize());
        if(tagQuery.getState()!=null &&tagQuery.getState()!=-99){
            query.addEq("state", tagQuery.getState());
        }else{
            query.addNotEq("state", SoftTag.STATE_DEL);
        }


        query.addLike("tagName", tagQuery.getTagName());


        query.addOrder("sortIndex", Query.DBOrder.ASC);
        Paged<SoftTag> page = findPagedByQuery(query);

        List<SoftTag> list = page.getListData();
        Paged<SoftTagVo> paged = new Paged<SoftTagVo>();
        List<SoftTagVo> listd = new ArrayList<SoftTagVo>();
        for (int i = 0; i < list.size(); i++) {
            SoftTag softTag = list.get(i);
            SoftTagVo softTagVo = new SoftTagVo();
            BeanUtils.copyProperties(softTag, softTagVo);
            listd.add(softTagVo);
        }
        paged.setListData(listd);
        paged.setPageSize(page.getPageSize());
        paged.setPageNo(page.getPageNo());
        paged.setTotalCount(page.getTotalCount());
        return paged;
    }

    /**
     * @param softTag
     */
    public void save(SoftTag softTag) {
        Integer curr = DateUtil.getCurrentTime();
        softTag.setLastModifyTime(curr);
        if (null == softTag.getTagId()) {
            insert(softTag);
            systemLogService.log(SystemLog.ModuleTypeEnum.TAGLIST, SystemLog.OperateTypeEnum.ADD, softTag.getTagId());

        } else {
            SoftTag domain = get(softTag.getTagId());
            softTag.setState(domain.getState());
            update(softTag);
            systemLogService.log(SystemLog.ModuleTypeEnum.TAGLIST, SystemLog.OperateTypeEnum.EDIT, softTag.getTagId());

        }
    }
}
